package com.browsesoft;

import com.browsesoft.dbtools.DBTools;

import java.sql.SQLException;
import java.util.Hashtable;

/**
 * 得到系统所需要的序号，可以预装载一定量的序号
 */
public class SequenceFind {
	/**
	 * 本次缓存的最大序号
	 */
	private static int maxID = 0;

	/**
	 * 当前取得的序号
	 */
	private static int id = 0;

	/**
	 * 得到当前序号
	 * 
	 * @return 当前序号
	 * @throws java.sql.SQLException
	 */
	public synchronized static int getID() throws Exception {
		// 保存要返回的id号
		int cur = id;
		// id号后移
		id++;
		// 如果超出缓存
		if (id >= maxID) {
			// 装载缓存
			loadID();
		}
		return cur;
	}

	/**
	 * 得到当前序号
	 * 
	 */
	public static void loadID() throws Exception {
		// 从序号表中得到当前序号
		String sql = "select bssequence from bsdual";
		int cur = 1;
		try {
			String result[][] = DBTools.executeQueryWithTableHead(sql);
			cur = Integer.parseInt(result[1][0]);
		} catch (SQLException e) {
			// 给bsdual插入一条数据
			Hashtable ht = new Hashtable();
			ht.put("bssequence", "1");
			DBTools.insert("bsdual", ht);
		}
		// 得到缓存的个数
		int count = 1;
		try {
			count = Integer.parseInt(PropertiesService.getProperty("sequence",
					"count"));
		} catch (Exception e) {
		}
		// 最大序号为当前序号+缓存个数
		maxID = cur + count;
		id = cur;
		// 更新序号表
		DBTools.excuteUpdate("update bsdual set bssequence = "
				+ Integer.toString(maxID));
	}
}